package jiazhong.hfl20250315;

// 1.给定两个⼤⼩分别为 m 和 n 的正序（从⼩到⼤）集合 nums1 和 nums2。请你找出并返回这两个正序集合的中位数

// 题解:1.因为要正序集合所以直接采用 TreeSet.
//     2.新建一个newTreeSet集合,最小长度为 m+n 并将m和n中的元素添加到newTreeSet中.
//     3.判断newTreeSet的size()是偶数还是奇数,若为奇数直接取(size()/2)+1的数,否则[((size()/2)+1)+((size()/2)+1)]/2



import java.util.ArrayList;
import java.util.List;
import java.util.TreeSet;

public class Median {
    // 创建两个集合
    public static TreeSet<Integer> createSet(int m, int n) {
        TreeSet<Integer> set1 = new TreeSet<>();
        for (int i = 0; i < m; i++) {
            set1.add((int) (Math.random() * 50 + 1));
        }
        System.out.println("Set1:" + set1);
        TreeSet<Integer> set2 = new TreeSet<>();
        for (int i = 0; i < n; i++) {
            set2.add((int) (Math.random() * 50 + 1));
        }
        System.out.println("Set2:" + set2);
        TreeSet<Integer> newTreeSet = new TreeSet<>();
        for (Integer i : set1) {
            newTreeSet.add(i);
        }
        for (Integer j : set2) {
            newTreeSet.add(j);
        }
        System.out.println("合并后的集合:" + newTreeSet);
        return newTreeSet;
    }

    // 中途醒悟:TreeSet没有get方法,所以不能直接取集合的中间元素,只能先转换为List,然后取中间元素.

    public static double findMedian(TreeSet<Integer> set) {
        List<Integer> list = new ArrayList<>(set);
        int size = list.size();
        if (size % 2 != 0) {
            return list.get(size / 2);
        } else {
            return (list.get(size / 2 - 1) + list.get(size / 2)) / 2.0;
        }
    }

    public static void main(String[] args) {
        TreeSet<Integer> newTreeSet = createSet(2, 3);
        double median = findMedian(newTreeSet);
        System.out.println("中位数是:" + median);
    }
}
